<!doctype html>



  


<html class="theme-next mist use-motion">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>



<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />












  
  
  <link href="/vendors/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />




  
  
  
  

  
    
    
  

  

  

  

  

  
    
    
    <link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
  






<link href="/vendors/font-awesome/css/font-awesome.min.css?v=4.4.0" rel="stylesheet" type="text/css" />

<link href="/css/main.css?v=5.0.1" rel="stylesheet" type="text/css" />


  <meta name="keywords" content="Deployment platform," />








  <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?v=5.0.1" />






<meta name="description" content="说明：Docker配置和使用。">
<meta name="keywords" content="Deployment platform">
<meta property="og:type" content="article">
<meta property="og:title" content="Docker">
<meta property="og:url" content="http://bebetter.site/2017/01/12/Software/Deployment platform and configuration management 部署平台与配置管理/Docker/index.html">
<meta property="og:site_name" content="gatewayzy">
<meta property="og:description" content="说明：Docker配置和使用。">
<meta property="og:updated_time" content="2017-01-12T05:58:56.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Docker">
<meta name="twitter:description" content="说明：Docker配置和使用。">



<script type="text/javascript" id="hexo.configuration">
  var NexT = window.NexT || {};
  var CONFIG = {
    scheme: 'Mist',
    sidebar: {"position":"right","display":"always"},
    fancybox: true,
    motion: true,
    duoshuo: {
      userId: 0,
      author: '博主'
    }
  };
</script>




  <link rel="canonical" href="http://bebetter.site/2017/01/12/Software/Deployment platform and configuration management 部署平台与配置管理/Docker/"/>

  <title> Docker | gatewayzy </title>
</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">

  










  
  
    
  

  <div class="container one-collumn sidebar-position-right page-post-detail ">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-meta ">
  

  <div class="custom-logo-site-title">
    <a href="/"  class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <span class="site-title">gatewayzy</span>
      <span class="logo-line-after"><i></i></span>
    </a>
  </div>
  <p class="site-subtitle">blog of gatewayzy</p>
</div>

<div class="site-nav-toggle">
  <button>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
  </button>
</div>

<nav class="site-nav">
  

  
    <ul id="menu" class="menu">
      
        
        <li class="menu-item menu-item-home">
          <a href="/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-home"></i> <br />
            
            首页
          </a>
        </li>
      
        
        <li class="menu-item menu-item-categories">
          <a href="/categories" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-th"></i> <br />
            
            分类
          </a>
        </li>
      
        
        <li class="menu-item menu-item-about">
          <a href="/about" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-user"></i> <br />
            
            关于
          </a>
        </li>
      
        
        <li class="menu-item menu-item-archives">
          <a href="/archives" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
            
            归档
          </a>
        </li>
      
        
        <li class="menu-item menu-item-tags">
          <a href="/tags" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-tags"></i> <br />
            
            标签
          </a>
        </li>
      

      
    </ul>
  

  
</nav>

 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                Docker
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2017-01-12T13:58:04+08:00" content="2017-01-12">
              2017-01-12
            </time>
          </span>

          
            <span class="post-category" >
              &nbsp; | &nbsp;
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
              
                <span itemprop="about" itemscope itemtype="https://schema.org/Thing">
                  <a href="/categories/Softwares/" itemprop="url" rel="index">
                    <span itemprop="name">Softwares</span>
                  </a>
                </span>

                
                

              
            </span>
          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        <p><strong>说明：</strong>Docker配置和使用。<br><a id="more"></a></p>
<ul>
<li>运行环境：<ul>
<li>windows 10为主 / ubuntu 14.04</li>
<li>docker 1.12.3</li>
</ul>
</li>
<li>参考文章<ul>
<li><a href="https://store.docker.com/" target="_blank" rel="external">docker store</a></li>
<li><a href="https://hub.docker.com/explore/" target="_blank" rel="external">docker hub</a></li>
<li><a href="http://www.docker.org.cn/book/docker/what-is-docker-16.html" target="_blank" rel="external">docker中文api</a></li>
<li><a href="https://docs.docker.com/engine/reference/builder/" target="_blank" rel="external">docker英文api</a></li>
<li><a href="https://cr.console.aliyun.com" target="_blank" rel="external">阿里云管理控制台(云服务、镜像站点等)</a></li>
<li><a href="http://www.cnblogs.com/xiadongqing/p/6144053.html" target="_blank" rel="external">docker-image container 基本操作 -常用命令</a></li>
<li><a href="http://www.runoob.com/docker/docker-tutorial.html" target="_blank" rel="external">菜鸟教程–docker</a></li>
</ul>
</li>
</ul>
<hr>
<h2 id="介绍"><a href="#介绍" class="headerlink" title="介绍"></a>介绍</h2><h3 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h3><ul>
<li>docker基于Go语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中，然后发布到任何流行的 Linux 机器上，也可以实现虚拟化。</li>
<li>容器的性能开销极低，容器之间相互独立。Docker成本低。一个只能开数个虚拟机的电脑一般能开数十个 container ，且 container 的启动时间一般在数秒内，比虚拟机快得多。另外，由于 docker 的 image 除了一些特殊的基础镜像外基本都是增量镜像，因此重复部分不会耗费额外的资源，所以几个看起来有数 g 的 image 如果里面使用的基础镜像有重复部分（大部分情况下都会有部分重复），那么它们实际占用空间将会小得多。</li>
<li>docker 虽然是一个虚拟化技术，但使用上却更像是在管理系统软件或者代码。使用的命令也是经常接触的，因此程序员会感到很亲切且容易上手。</li>
<li>同时由于可以使用 Dockerfile 进行 image 的构建，且 docker hub 支持从 github 等地方自动根据 Dockerfile 进行构建，所以 docker 把运行环境也集成到 CI 中了。</li>
<li>美中不足的是由于 docker 目前仅支持 linux 上的容器技术，因此它要在非 Linux 系统下运行必须加多一个虚拟机层。这会造成一些在 Linux 上运行不会出现的问题（ip 地址、硬件资源、文件映射等），同时由于基于 linux ，一些 windows 的程序会水土不服，泛用性比虚拟机差一些。</li>
</ul>
<h3 id="相关术语"><a href="#相关术语" class="headerlink" title="相关术语"></a>相关术语</h3><ul>
<li>container：容器。<ul>
<li>容器可以看做是一个独立的主机。 container 的创建通常有一个 image 作为其模板。类比成虚拟机的话可以理解为 image 就是虚拟机的镜像，而 container 就是一个个正在运行的虚拟机。一个虚拟机镜像可以创建出多个运行的虚拟主机容器且相互独立。 </li>
<li>container 一旦创建如果没有用 rm 命令移除，将会一直存在。所以用完后记得删除。</li>
</ul>
</li>
<li>image：镜像。<ul>
<li>镜像相当于 container 的模板，container 创建后里面有什么软件完全取决于它使用什么 image 。image 可以通过 container 创建（相当于把此时 container 的状态保存成快照），也可以通过 Dockerfile （一个文本文件，里面使用 docker 规定的一些写法）来创建。使用 Dockerfile 创建image时可以对环境配置和代码一起进行管理，使用container生成image的方法只能生成container中的东西。</li>
</ul>
</li>
<li>registry<ul>
<li>存放镜像的仓库。只要能连接到 registry 每个人都可以很方便地通过 pull 命令从仓库中获取镜像。docker 默认使用的仓库是 <a href="https://hub.docker.com/" target="_blank" rel="external">docker hub</a>，国内可以使用 DaoCloud 来建立 Mirror 连接到 docker hub，进而加快获取 image 的速度。</li>
</ul>
</li>
<li>docker client<ul>
<li>docker客户端。通过命令行或者python等工具访问docker的守护进程和主机容器。</li>
</ul>
</li>
<li>docker host<ul>
<li>docker主机，服务器后端。执行docker守护进行和容器。</li>
</ul>
</li>
<li>boot2docker<ul>
<li>一个轻量级 linux 虚拟机，主要是为了让非 linux 系统也能用上 docker 。它实质上是一个 virtualbox 虚拟主机+一个能管理这个虚拟主机的命令行工具。由于这个虚拟主机的存在，在非 linux 系统上 container 需要获取一些物理系统资源（如 usb 设备）时不仅需要配置 docker 命令，还需要配置 boot2docker 这个虚拟主机的资源配置。</li>
</ul>
</li>
<li>Docker Machine<ul>
<li>Docker Machine是一个简化Docker安装的命令行工具，通过一个简单的命令行即可在相应的平台上安装Docker，比如VirtualBox、 Digital Ocean、Microsoft Azure。</li>
</ul>
</li>
</ul>
<hr>
<h2 id="安装配置"><a href="#安装配置" class="headerlink" title="安装配置"></a>安装配置</h2><h3 id="Windows下使用Docker-for-Windows"><a href="#Windows下使用Docker-for-Windows" class="headerlink" title="Windows下使用Docker-for-Windows"></a>Windows下使用Docker-for-Windows</h3><ul>
<li>Docker-for-Windows自带了docker实现，并且提供了可视化的管理和设置界面，并提供可视化的仓库管理软件Kitematic。</li>
<li>从百度或者阿里云等地方下载msi安装文件，安装完即可。<ul>
<li>测试Docker-for-Windows：启动图标，注册账号并登录。</li>
<li>测试docker：使用cmd或者powershell等，运行<code>docker --version</code>，查看版本。</li>
<li>连接Kitematic：Docker-for-Windows托盘图标右键有Kitematic仓库，为了使用该镜像库，需要下载<a href="https://github.com/docker/kitematic" target="_blank" rel="external">Kitematic-Windows</a>并解压到 <code>C:\Program Files\Docker\Kitematic</code>，即可使用Kitematic。</li>
</ul>
</li>
</ul>
<h3 id="Ubuntu下使用docker"><a href="#Ubuntu下使用docker" class="headerlink" title="Ubuntu下使用docker"></a>Ubuntu下使用docker</h3><p>这一部分是我后来写的，所以内容比较乱…</p>
<h4 id="基本安装配置"><a href="#基本安装配置" class="headerlink" title="基本安装配置"></a>基本安装配置</h4><ul>
<li>下载安装docker: <code>curl -sSL https://get.docker.com/ | sh</code></li>
<li>添加docker到组：如果不将docker添加到group的话，每次运行都需要sudo docker，所以可以<code>sudo usermod -aG docker yourgroup</code>，然后logout。</li>
<li>启动docker： <code>sudo service docker start|stop|restart...</code>，测试docker <code>docker run hello-world</code>，无法下载的话应该是被墙了，<a href="http://blog.csdn.net/qq_26091271/article/details/51501768" target="_blank" rel="external">Docker学习笔记 — 配置国内免费registry mirror</a></li>
<li>docker示例：<ul>
<li>运行程序容器 <code>docker run ubuntu:15.10 /bin/echo &quot;Hello world&quot;</code> 运行容器，没有镜像会自动下载。然后在容器里执行 /bin/echo “Hello world”。</li>
<li>运行交互式容器 <code>docker run -i -t ubuntu:15.10 /bin/bash</code> -i是对容器内的stdin进行交互，-t是在容器内指定一个终端。可以在容器内运行命令。用exit退出容器。</li>
<li>后台运行容器 <code>docker run -d ubuntu:15.10 /bin/sh -c &quot;while true; do echo hello world; sleep 1; done&quot;</code></li>
</ul>
</li>
<li>卸载docker：<code>sudo apt-get purge -y docker-engine</code>、<code>sudo apt-get autoremove -y --purge docker-engine</code>、<code>sudo apt-get autoclean</code><h3 id="搭建私人仓库"><a href="#搭建私人仓库" class="headerlink" title="搭建私人仓库"></a>搭建私人仓库</h3></li>
<li>下载registry镜像 docker pull registry</li>
<li>创建registry容器 <code>docker run -d -v /opt/registry:/var/registry -p 5000:5000 --restart=always --name registry-tcm registry</code> </li>
<li>下载webUI镜像 docker pull hyper/docker-registry-web </li>
<li>创建webUI容器 <code>docker run -it -p 8080:8080 --name registry-web --link registry-tcm --restart=always -e REGISTRY_URL=http://10.15.82.66:5000/v2 -e REGISTRY_NAME=10.15.82.66:5000 hyper/docker-registry-web</code></li>
<li>访问<code>http://10.15.82.66:8080/</code>，浏览image，进行pull等操作。</li>
</ul>
<h3 id="docker配置仓库加速器："><a href="#docker配置仓库加速器：" class="headerlink" title="docker配置仓库加速器："></a>docker配置仓库加速器：</h3><ul>
<li>常见仓库站点<ul>
<li>官方仓库比较正规，但可能有速度慢<a href="https://hub.docker.com/explore/" target="_blank" rel="external">docker hub</a>或者linux下无法访问的问题。</li>
<li><a href="https://dev.aliyun.com/search.html" target="_blank" rel="external">阿里云docker</a>。也可以注册<a href="https://cr.console.aliyun.com" target="_blank" rel="external">阿里云</a>账号，在管理控制台中，查看docker镜像仓库。</li>
<li><a href="http://www.daocloud.io/" target="_blank" rel="external">国内的DaoCloud</a>。注册账号，然后配置 Docker 加速器。</li>
</ul>
</li>
<li>docker的配置<ul>
<li>参考官方api<a href="https://docs.docker.com/registry/recipes/mirror/#configure-the-docker-daemon" target="_blank" rel="external">Configure the Docker daemon</a></li>
<li>参考文档<a href="https://lug.ustc.edu.cn/wiki/mirrors/help/docker" target="_blank" rel="external">Docker 镜像使用帮助</a></li>
<li>linux下修改/etc/docker/daemon.json，添加<code>{ &quot;registry-mirrors&quot;: [&quot;https://&lt;my-docker-mirror-host&gt;&quot;] }</code>。没有的话可以新建。不同的版本可能使用/etc/default/docker 进行配置，但这是过时的用法，还是推荐daemon.json方式，示例配置见附录。</li>
<li>windows下修改C:\ProgramData\docker\config\daemon.json，如果是用docker for windows等软件就可以设置软件的setting–daemon。</li>
<li>Docker 的Daemon的配置基本就是上面所述的方法，以后简略，还可以参考<a href="http://guide.daocloud.io/dcs/daocloud-9153151.html" target="_blank" rel="external">Docker 加速器</a>。</li>
</ul>
</li>
</ul>
<hr>
<h2 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h2><ul>
<li>参考文章：<a href="http://www.runoob.com/docker/docker-command-manual.html" target="_blank" rel="external">Docker 命令大全</a></li>
</ul>
<h3 id="通用"><a href="#通用" class="headerlink" title="通用"></a>通用</h3><ul>
<li>docker version 查看docker版本</li>
<li>docker info 查看docker信息</li>
<li><code>docker --help</code> 查看docker命令提示</li>
<li>docker help build 查看create命令的帮助提示</li>
</ul>
<h3 id="镜像仓库"><a href="#镜像仓库" class="headerlink" title="镜像仓库"></a>镜像仓库</h3><ul>
<li>登录仓库： docker login -u username -p password  登录一个docker仓库，不指定仓库地址则用官方仓库docker hub</li>
<li>登出仓库： docker logout 登出仓库</li>
<li>查找image： docker search ubuntu 查找仓库中的相关镜像。<code>docker search --filter=stars=100 ubuntu</code>过滤star数超过100的。</li>
<li>获取image： docker pull ubuntu:16.04 从登录库中下载ubuntu且tag是16.04的，tag默认是latest，但latest只是个名称，不代表最新。如 <code>docker pull -a java</code>下载所有java的tagged的镜像，–disable-content-trust:忽略镜像的校验,默认开启</li>
<li>上传image： docker push acom/ubuntu16.10 上传该image到已经登录的仓库中，<strong>不指定tag则上传所有tag</strong>。可–disable-content-trust。</li>
</ul>
<h3 id="本地image镜像"><a href="#本地image镜像" class="headerlink" title="本地image镜像"></a>本地image镜像</h3><ul>
<li>images 查看所有image： docker images 查看本地所有的image。–digests显示摘要信息，-a显示本地所有镜像(含中间映象层)。docker images ubuntu  过滤出含有ubuntu名称的images。</li>
<li>build 使用Dockerfile创建镜像，<a href="http://www.runoob.com/docker/docker-build-command.html" target="_blank" rel="external">可选参数比较多</a> <ul>
<li>docker build -t com/ubuntu15.10:v1 ./image1/ 用image1文件夹下Dockerfile创建image，名称叫做acom/ubuntu15，tag为v1，-t指定生成target名称。</li>
<li>docker build github.com/creack/docker-firefox  使用URL的 Dockerfile 创建镜像</li>
</ul>
</li>
<li>tag 标记分库： docker tag acom/ubuntu16.10 tag v1d5f 给镜像acom/ubuntu16.10打上tag v1d5f，将其归入某一个仓库。acom应该使用ip或者网址，如果不是的话在push的时候会提交到docker.io，会提示没有提交权限。</li>
<li>rmi 删除本地image： docker rmi acom/ubuntu16.10:v1 删除本地image。-f强制删除，–no-prune不移除其过程镜像。</li>
<li>history 历史创建信息： docker history ubuntu  查看镜像的创建历史</li>
<li>save 将镜像保存成tar归档文件： docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3  用-o指定保存到的文件</li>
<li><p>import 从归档文件中创建镜像： docker import my_ubuntu_v3.tar runoob/ubuntu:v4 </p>
</li>
<li><p>build demo</p>
<ul>
<li>每一个指令都会在镜像上创建一个新的层，每一个指令的前缀都必须是大写的。</li>
<li>第一条FROM，指定使用哪个镜像源</li>
<li>RUN 指令告诉docker 在镜像内执行命令，安装了什么</li>
<li>然后，我们使用 Dockerfile 文件，通过 <code>docker build -t runoob/centos:6.7 .</code>构建一个镜像，-t指定生成target镜像名称，.指定Dockerfile所在目录，或者指定配置文件名<code>docker build -t deepqa:latest -f Dockerfile.gpu ./</code> 使用Dockerfile.gpu配置。</li>
</ul>
</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div></pre></td><td class="code"><pre><div class="line">## Dockerfile Demo: to build DeepQ&amp;A container image with tensorflow</div><div class="line">FROM python:3.5.2</div><div class="line">## Dependencies</div><div class="line">RUN \</div><div class="line">  apt-get -qq -y update &amp;&amp; apt-get -y install unzip</div><div class="line">RUN  \</div><div class="line">  pip3 install -U nltk \</div><div class="line">  tqdm \</div><div class="line">  django \</div><div class="line">  asgi_redis \</div><div class="line">  channels &amp;&amp; \</div><div class="line">  python3 -m nltk.downloader punkt</div><div class="line">## Tensorflow</div><div class="line">ARG TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0-cp35-cp35m-linux_x86_64.whl</div><div class="line">RUN \</div><div class="line">  pip3 install -U $TF_BINARY_URL</div><div class="line">COPY ./ /root/DeepQA</div><div class="line">## Run Config</div><div class="line"># You should generate your own key if you want deploy it on a server</div><div class="line">ENV CHATBOT_SECRET_KEY=&quot;e#0y6^6mg37y9^+t^p_$xwnogcdh=27)f6_=v^$bh9p0ihd-%v&quot;</div><div class="line">ENV CHATBOT_REDIS_URL=&quot;redis&quot;</div><div class="line">EXPOSE 8000</div><div class="line">WORKDIR /root/DeepQA/chatbot_website</div><div class="line">RUN python3 manage.py makemigrations</div><div class="line">RUN python3 manage.py migrate</div><div class="line"># Launch the server</div><div class="line">CMD python3 manage.py runserver 0.0.0.0:8000</div></pre></td></tr></table></figure>
<h3 id="container容器"><a href="#container容器" class="headerlink" title="container容器"></a>container容器</h3><ul>
<li>查看所有运行中的容器： docker ps 查看所有运行中的容器的状态</li>
<li>创建容器： <code>docker create --name tf1 tf/tensorflow</code> 创建容器并指定名称，create语法与run相同</li>
<li>查看容器列表： docker ps 查看所有运行中的容器，-l查看最后常见的容器，-a查看所有容器。</li>
<li>创建并运行容器： <code>docker create -it -p 8080:8888 -p 8081:6006 -e PASSWORD=123456 --name=tf1 tensorflow/tensorflow:latest</code> 若找不到容器会创建默认容器，若有指定的容器会默认使用其创建时的配置。语法为 docker run [OPTIONS] IMAGE [COMMAND] [ARG…]，options常见选项：<ul>
<li>-a stdin 指定标准输入输出内容类型，可选STDIN/STDOUT/STDERR </li>
<li>-d 后台运行容器，并返回容器id，detach</li>
<li>-i 以交互模式运行容器，常常与-t同时使用</li>
<li>-t 为容器重新分配一个伪输入终端，常与-i同时使用</li>
<li><code>--name=tf1</code> 指定容器运行时的name，又如–name tf2，不指定时会随机生成name。</li>
<li><code>--dns 8.8.8.8</code> 指定容器dns，默认同宿主一致</li>
<li><code>--dns-search a.com</code> 指定容器dns搜索域名，默认和宿主一致</li>
<li>-h host1 指定容器的hostname为host1</li>
<li>-e username=”user1” 设置环境变量</li>
<li><code>--env-file=[]</code> 从指定文件读取环境变量</li>
<li><code>--cpuset=&quot;0-2&quot;</code> 设置运行容器的cpu，eg. <code>--cpuset=&quot;0,2,3&quot;</code></li>
<li>-m 设置容器使用的最大内存</li>
<li><code>--net=&quot;bridge&quot;</code> 设置容器联网的方式，可选bridge/host/none/container</li>
<li><code>--link=[]</code>  添加链接到另一个容器</li>
<li><code>--expose=[]</code>  开放一组端口</li>
<li>-p 宿主port:containerPort  将宿主port映射到容器port，访问宿主的宿主port以访问容器的port。多个如 -p 8080:8888 -p 8081:6006</li>
<li>-P 随机使用主机的端口映射到容器的80端口</li>
<li>-v /tmp:/tmp/data  将主机的/tmp映射到容器的/tmp/data</li>
</ul>
</li>
<li>容器管理：<ul>
<li>可以使用容器ID或者容器Name来标识一个容器，可以先用docker ps或者docker ps -a查看容器信息，再进行操作。</li>
<li>容器生命周期： <ul>
<li>docker stop|stop|restart|kill|rm 6e5f/tf1   操作成功时返回其ID或者name。kill是强制关闭，rm是删除。</li>
<li>docker pause|unpause  暂停|恢复容器中的所有进程</li>
<li>docker exec -it mynginx /bin/sh /root/runoob.sh  在容器中运行sh runoob脚本，且使用交互终端模式。</li>
</ul>
</li>
<li>容器信息<ul>
<li>docker inspect tf3  查看容器配置信息</li>
<li>docker port 5e6f  查看容器的端口映射配置</li>
<li>docker top tf1  查看容器当前的进程列表</li>
<li>docker logs tf3  查看容器的日志。-f表示跟踪输出，-t显示时间戳，–since限制日志开始时间，–tail限制N条输出。</li>
<li>docker export -o mysql-<code>date +%Y%m%d</code>.tar a404c6c174a2 将id为a404c6c174a2的容器保存为mysql.date.tar文件 </li>
<li>docker ps 查看所有运行中的容器，-l查看最后常见的容器，-a查看所有容器。</li>
<li>docker events 查看容器实时的事件，运行该句再开关容器试试。<code>docker events -f &quot;image&quot;=&quot;mysql:5.6&quot; --since=&quot;1467302400&quot; --until=&quot;1..&quot;</code> -f过滤事件，–since过滤起始时间，–until过滤截止时间。</li>
<li>docker wait tf1  阻塞运行直到目标容器停止，并打印退出代码。</li>
</ul>
</li>
<li>容器文件控制<ul>
<li>docker diff tf1  查看容器相对于image模板的文件修改</li>
<li>docker cp /www/home tf1:/www/  将主机文件夹拷贝到tf1的目录下。-L保持源目标中的链接link。</li>
<li>docker commit ubuntu acom/ubuntu14.04:latest 将容器ubuntu创建为image，名称叫acom/ubuntu，tag为latest。-a作者，-c用Dockerfile指令来创建镜像，-m说明信息，-p在commit时暂停容器。 <code>docker commit -a &quot;uno.com&quot; -m &quot;my tf&quot; tf1  tf:v1</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h2 id="Docker使用demo"><a href="#Docker使用demo" class="headerlink" title="Docker使用demo"></a>Docker使用demo</h2><h3 id="hello-world"><a href="#hello-world" class="headerlink" title="hello-world"></a>hello-world</h3><ul>
<li>运行<code>docker run hello-world</code>查找image hello-world，找不到会自动下载image，比较慢。下载完会接着实例化容器并运行，而且在Kitematic中可以看到本地该image和容器，并有对应的信息、管理、env、端口等设置。</li>
</ul>
<h3 id="ubuntu"><a href="#ubuntu" class="headerlink" title="ubuntu"></a>ubuntu</h3><ul>
<li>从阿里云搜索对应的image的地址</li>
<li>运行 <code>docker pull registry.cn-hangzhou.aliyuncs.com/ubuntu-14-04/ubuntu14.04</code> Kitematic的my images中可看到该image或运行docker images。</li>
</ul>
<h3 id="tensorflow"><a href="#tensorflow" class="headerlink" title="tensorflow"></a>tensorflow</h3><ul>
<li>参考文章: <a href="https://hub.docker.com/r/tensorflow/tensorflow/" target="_blank" rel="external">TensorFlow in hub.docker</a></li>
<li>使用CPU TF<ul>
<li>-e配置jupter密码</li>
<li>访问浏览器，输入密码登录，新建python工程，书写tf代码，运行并查看结果，可参考<a href="http://blog.csdn.net/dream_an/article/details/55520205" target="_blank" rel="external">基于Docker的TensorFlow机器学习框架搭建和实例源码解读</a></li>
</ul>
</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">docker pull tensorflow/tensorflow</div><div class="line">docker create -it -p 8080:8888 -p 8081:6006 -e PASSWORD=123456 --name=tf1 tensorflow/tensorflow:latest</div><div class="line">docker start tf1</div><div class="line">echo &apos;http://localhost:8080/-------------------&apos;</div></pre></td></tr></table></figure>
<ul>
<li>使用GPU TF<ul>
<li>安装<a href="https://github.com/NVIDIA/nvidia-docker" target="_blank" rel="external">nvidia-docker</a>，以ubuntu为例。</li>
</ul>
</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">echo &apos;Install nvidia-docker and nvidia-docker-plugin-------------------&apos;</div><div class="line">wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb</div><div class="line">sudo dpkg -i /tmp/nvidia-docker*.deb &amp;&amp; rm /tmp/nvidia-docker*.deb</div><div class="line">echo &apos;Test nvidia-smi with nvidia-docker-------------------&apos;</div><div class="line">nvidia-docker run --rm nvidia/cuda nvidia-smi</div><div class="line"></div><div class="line">nvidia-docker run -it -p 8888:8888 tensorflow/tensorflow:latest-gpu</div><div class="line">echo &apos;http://localhost:8888/-------------------&apos;</div></pre></td></tr></table></figure>
<hr>
<h2 id="Docker私有仓库"><a href="#Docker私有仓库" class="headerlink" title="Docker私有仓库"></a>Docker私有仓库</h2><p>私人仓库的一般使用流程为：创建私人仓库、准备要上传的镜像、仓库管理（上传镜像、查看镜像、下载镜像）。<strong>下文的‘私服’、‘私库’、‘私人仓库’均指代‘私有仓库’。</strong></p>
<h3 id="私有仓库的使用"><a href="#私有仓库的使用" class="headerlink" title="私有仓库的使用"></a>私有仓库的使用</h3><ul>
<li>构建私有仓库需要使用registry镜像。<ul>
<li>Registry镜像在github上有两份代码：老代码库和<a href="https://github.com/docker/distribution" target="_blank" rel="external">新代码库</a>。老代码是采用python编写的，存在pull和push的性能问题，出到0.9.1版本之后就标志为deprecated，不再继续开发。从2.0版本开始在新代码库进行开发，新代码库采用go语言编写，修改了镜像id的生成算法、registry上镜像的保存结构，大大优化了pull和push镜像的效率。</li>
</ul>
</li>
<li>部署registry容器<ul>
<li>pull+create+start <code>docker pull registry</code>、<code>docker create -p 5000:5000 --restart=always --name registry registry</code>再<code>docker start registry</code></li>
<li>或者直接run <code>docker run -d -v /opt/registry:/var/registry -p 5000:5000 --restart=always --name registry registry</code>，–restart表示docker运行时自动启动该容器。</li>
<li>查看运行状态 docker ps，浏览器访问<code>http://127.0.0.1:5000/v2/_catalog</code>，查看当前私库的所有镜像，使用<code>http://127.0.0.1:5000/v2/tensorflow/tags/list</code>查看其tag的列表。更多api使用请参考<a href="https://docs.docker.com/registry/spec/api/" target="_blank" rel="external">HTTP API V2</a>。</li>
</ul>
</li>
<li>发布镜像<ul>
<li>主机上下载或生成一个image，如hello-world</li>
<li>docker tag标记为将会推送的image： docker tag hello-world 127.0.0.1:5000/hello-world。查看本地images会看到tagged的image</li>
<li>docker push 127.0.0.1:5000/hello-world  发布到仓库中，访问<code>http://127.0.0.1:5000/v2/_catalog</code>查看仓库中的镜像。</li>
<li>删除本地image，再试验从私服 docker pull 127.0.0.1:5000/hello-world</li>
</ul>
</li>
<li>删除镜像<ul>
<li>私有仓库v2版本中的镜像，官方不建议删除，但是也提供了删除接口。删除的原理就是把索引删掉，但磁盘上的数据是删不掉的。这是由于各个镜像之间的不同层共用的关系，可能导致删除一个镜像后其余的镜像也无法使用。</li>
<li><a href="https://github.com/docker/distribution/blob/master/docs/spec/api.md#deleting-an-image" target="_blank" rel="external">registry v2 api</a>中要求  <code>DELETE /v2/&lt;name&gt;/manifests/&lt;reference&gt;</code> For deletes, reference must be a digest。但是我pull下来看到digest之后，尝试删除<code>curl -X DELETE 127.0.0.1:5000/v2/hello-world/manifests/sha256:f3b3b...</code> 提示错误”unsupported”，也没找到合适好的解决方法。粗暴的方法就是不管它，或者重建registry…</li>
</ul>
</li>
</ul>
<h3 id="使用私人仓库示例"><a href="#使用私人仓库示例" class="headerlink" title="使用私人仓库示例"></a>使用私人仓库示例</h3><p>下面以windows为例，详细记录私库的建立、可视化管理和使用。</p>
<h4 id="创建私服"><a href="#创建私服" class="headerlink" title="创建私服"></a>创建私服</h4><ul>
<li>创建私库容器 <code>docker run -d -p 5000:5000 --restart=always --name my-registry registry</code> 。</li>
<li>可以启动、修改一个容器（docker start tf1.2.0.py3、 docker diff tf1.2.0.py3），改成自己想要的配置。</li>
<li>将容器生成镜像，并tag到指定域名<ul>
<li>docker commit tf1.2.0.py3 tcm/tf-1.2.0-rc2-py3:latest  从容器生成一个镜像</li>
<li>docker tag tcm/tf-1.2.0-rc2-py3 10.15.62.118:5000/tf:1.2.0-rc2-py3  将镜像进行tag，标记向<strong>指定域名(不是乱写的)</strong>推送</li>
<li>也可以直接将上面两步合并 docker commit tf1.2.0.py3 10.15.62.118:5000/tf:1.2.0-rc2-py3</li>
</ul>
</li>
<li>docker images  查看本地所有镜像。不需要的tag镜像可以rmi，如docker rmi tcm/tf-1.2.0-rc2-py3:latest</li>
<li>docker push tf1.2.0.py3 10.15.62.118:5000/tf:1.2.0-rc2-py3  向指定ip仓库(私服)进行push，如提示https问题，参考问题解决”push到私有仓库失败，提示https问题”。</li>
<li>访问<code>http://10.15.62.118:5000/v2/_catalog</code> 查看私有仓库的所有镜像。</li>
</ul>
<h4 id="registry的webUI管理"><a href="#registry的webUI管理" class="headerlink" title="registry的webUI管理"></a>registry的webUI管理</h4><ul>
<li>上面使用浏览器查看仓库的信息比较麻烦，这里使用工具连接到仓库进行web可视化管理。</li>
<li>参考文章<ol>
<li><a href="https://hub.docker.com/r/hyper/docker-registry-web/" target="_blank" rel="external">hyper/docker-registry-web</a></li>
<li><a href="http://blog.csdn.net/mideagroup/article/details/52052618" target="_blank" rel="external">使用官方 docker registry 搭建私有镜像仓库及部署 web ui</a></li>
</ol>
</li>
<li><strong>下面以hyper/docker-registry-web为例对私库进行webUI管理</strong>。</li>
<li>docker-registry-web是docker hub提供的一个webUI工具的image，参考文章中也有相应的官方文档。总体使用流程为：先创建好私人仓库容器，再创建一个hyper/docker-registry-web容器，用后面这个容器去连接管理私库容器即可(支持镜像浏览、tag浏览，不支持删除)。</li>
<li>注意：文档中指出，创建的registry容器的name不要使用<code>registry</code> ，可以像这样 <code>docker run -d -p 5000:5000 --restart=always --name registry1 registry</code>使用registry1等乱七八糟的名字。</li>
<li>获取镜像docker pull hyper/docker-registry-web (可跳过该步骤)。</li>
<li><code>docker run -it -p 8080:8080 --name registry-web --link registry1 -e REGISTRY_URL=http://10.15.62.118:5000/v2 -e REGISTRY_NAME=10.15.62.118:5000 hyper/docker-registry-web</code></li>
<li>访问10.15.62.118:8080，查看私服中所有的镜像和tag信息。可以查看一个image的history等信息，如上面的就是10.15.62.118:5000/hello:latest，可以让别人docker pull(网络可达才行)。</li>
<li><strong>遇到的问题</strong>：页面提示“Could not create URI object: Illegal character…”且没有镜像数据，原因是REGISTRY_URL环境变量必须写<code>http://</code>，否则找不到。我只写ip:5000/v2就出现了这个问题。</li>
</ul>
<h4 id="使用私人仓库"><a href="#使用私人仓库" class="headerlink" title="使用私人仓库"></a>使用私人仓库</h4><ul>
<li>使用私服一般：配置私服设置、登录私服、查找下载、更新提交。</li>
<li>配置私库与登录私库：如何配置登录设置？？？</li>
<li>查找下载私库镜像<ul>
<li>方法1是使用registry的webUI管理工具，比如使用hyper/docker-registry-web查看私库的所有image和对应的地址。</li>
<li>方法2是登录私库，然后docker search？？？</li>
</ul>
</li>
<li>下载使用私服的镜像<ul>
<li>首先要知道私服的镜像地址。比如通过webUI查看到想要的image是<code>10.15.62.118:5000/hello:latest</code>。</li>
<li>下载镜像：在保证主机可达的情况下，<code>docker pull 10.15.62.118:5000/hello:latest</code>即可获取私库镜像。如果提示https错误，参考’问题与解决’设置‘insecure-registries’。</li>
</ul>
</li>
<li>更新提交：生成镜像、tag、push…详略。</li>
</ul>
<hr>
<h2 id="问题与解决"><a href="#问题与解决" class="headerlink" title="问题与解决"></a>问题与解决</h2><h3 id="docker-for-windows无法启动：Docker-Program-Run-IReadOnlyCollection-1-args"><a href="#docker-for-windows无法启动：Docker-Program-Run-IReadOnlyCollection-1-args" class="headerlink" title="docker for windows无法启动：Docker.Program.Run(IReadOnlyCollection`1 args)"></a>docker for windows无法启动：Docker.Program.Run(IReadOnlyCollection`1 args)</h3><ul>
<li>问题描述：docker for windows双击图标以启动docker，提示docker服务not running，确定启动后提示错误Docker.Program.Run(IReadOnlyCollection`1 args).</li>
<li>解决方法：重装docker for windows（github上有该<a href="https://github.com/docker/for-win/issues/208" target="_blank" rel="external">issue208</a>，较多人支持删除<code>C:\ProgramData\Docker</code>、<code>%AppData%/Local/Docker and %AppData%/Roaming/Docker</code>），我是删除之后没起效果，重装可以。</li>
</ul>
<h3 id="push到私有仓库失败，提示https问题"><a href="#push到私有仓库失败，提示https问题" class="headerlink" title="push到私有仓库失败，提示https问题"></a>push到私有仓库失败，提示https问题</h3><ul>
<li>这是因为私人的registry服务是http，不是安全的https仓库。</li>
<li>解决方法：<ul>
<li>Ubuntu修改/etc/docker/daemon.json，添加<code>{&quot;insecure-registries&quot; : [&quot;myregistrydomain.com:5000&quot;]}</code>，然后service docker restart。</li>
<li>Windows在C:\ProgramData\docker\config\daemon.json，如docker for windows等软件就设置软件的setting–daemon。（仓库镜像也在这里添加）</li>
<li>参考<a href="https://docs.docker.com/registry/insecure/" target="_blank" rel="external">Deploying a plain HTTP registry</a>，原文如下，就不翻译了</li>
</ul>
</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">Edit the daemon.json file, whose default location is /etc/docker/daemon.json on Linux </div><div class="line">  or C:\ProgramData\docker\config\daemon.json on Windows Server. </div><div class="line">If you use Docker for Mac or Docker for Windows, click the Docker icon, choose Preferences, and choose +Daemon.</div><div class="line">	&#123;</div><div class="line">  		&quot;insecure-registries&quot; : [&quot;myregistrydomain.com:5000&quot;]</div><div class="line">	&#125;</div><div class="line">If the daemon.json file does not exist, create it....</div></pre></td></tr></table></figure>
<hr>
<h2 id="附录"><a href="#附录" class="headerlink" title="附录"></a>附录</h2><h3 id="window下docker-daemon的配置"><a href="#window下docker-daemon的配置" class="headerlink" title="window下docker daemon的配置"></a>window下docker daemon的配置</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line">&#123;</div><div class="line">  &quot;registry-mirrors&quot;: [</div><div class="line">    &quot;https://iuu105a7.mirror.aliyuncs.com&quot;</div><div class="line">  ],</div><div class="line">  &quot;insecure-registries&quot;: [</div><div class="line">    &quot;10.15.62.118:5000&quot;</div><div class="line">  ],</div><div class="line">  &quot;debug&quot;: true,</div><div class="line">  &quot;experimental&quot;: true</div><div class="line">&#125;</div></pre></td></tr></table></figure>

      
    </div>

    <div>
      
        

      
    </div>

    <div>
      
        

      
    </div>

    <footer class="post-footer">
      
        <div class="post-tags">
          
            <a href="/tags/Deployment-platform/" rel="tag">#Deployment platform</a>
          
        </div>
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/2017/01/12/Software/Deployment platform and configuration management 部署平台与配置管理/Puppet/" rel="next" title="Puppet">
                <i class="fa fa-chevron-left"></i> Puppet
              </a>
            
          </div>

          <div class="post-nav-prev post-nav-item">
            
              <a href="/2017/01/12/OS/Ubuntu/04用户组与权限/" rel="prev" title="Ubuntu用户组与权限">
                Ubuntu用户组与权限 <i class="fa fa-chevron-right"></i>
              </a>
            
          </div>
        </div>
      

      
      
    </footer>
  </article>



    <div class="post-spread">
      
    </div>
  </div>


          </div>
          


          
  <div class="comments" id="comments">
    


  </div>


        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      

      
        <ul class="sidebar-nav motion-element">
          <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap" >
            文章目录
          </li>
          <li class="sidebar-nav-overview" data-target="site-overview">
            站点概览
          </li>
        </ul>
      

      <section class="site-overview sidebar-panel ">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
          <img class="site-author-image" itemprop="image"
               src="/statics/images/avatar.png"
               alt="gatewayzy" />
          <p class="site-author-name" itemprop="name">gatewayzy</p>
          <p class="site-description motion-element" itemprop="description">blog website with hexo and github pages</p>
        </div>
        <nav class="site-state motion-element">
          <div class="site-state-item site-state-posts">
            <a href="/archives">
              <span class="site-state-item-count">70</span>
              <span class="site-state-item-name">日志</span>
            </a>
          </div>

          
            <div class="site-state-item site-state-categories">
              <a href="/categories">
                <span class="site-state-item-count">10</span>
                <span class="site-state-item-name">分类</span>
              </a>
            </div>
          

          
            <div class="site-state-item site-state-tags">
              <a href="/tags">
                <span class="site-state-item-count">38</span>
                <span class="site-state-item-name">标签</span>
              </a>
            </div>
          

        </nav>

        

        <div class="links-of-author motion-element">
          
        </div>

        
        

        
        
          <div class="links-of-blogroll motion-element links-of-blogroll-inline">
            <div class="links-of-blogroll-title">
              <i class="fa  fa-fw fa-globe"></i>
              友情链接
            </div>
            <ul class="links-of-blogroll-list">
              
                <li class="links-of-blogroll-item">
                  <a href="https://github.com/gatewayzy" title="Github-gatewayzy" target="_blank">Github-gatewayzy</a>
                </li>
              
                <li class="links-of-blogroll-item">
                  <a href="http://google.com/" title="Goolge" target="_blank">Goolge</a>
                </li>
              
                <li class="links-of-blogroll-item">
                  <a href="http://wiki.jikexueyuan.com/" title="Wiki-jike" target="_blank">Wiki-jike</a>
                </li>
              
            </ul>
          </div>
        

      </section>

      
        <section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
          <div class="post-toc">
            
              
            
            
              <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#介绍"><span class="nav-number">1.</span> <span class="nav-text">介绍</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#简介"><span class="nav-number">1.1.</span> <span class="nav-text">简介</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#相关术语"><span class="nav-number">1.2.</span> <span class="nav-text">相关术语</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#安装配置"><span class="nav-number">2.</span> <span class="nav-text">安装配置</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#Windows下使用Docker-for-Windows"><span class="nav-number">2.1.</span> <span class="nav-text">Windows下使用Docker-for-Windows</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Ubuntu下使用docker"><span class="nav-number">2.2.</span> <span class="nav-text">Ubuntu下使用docker</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#基本安装配置"><span class="nav-number">2.2.1.</span> <span class="nav-text">基本安装配置</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#搭建私人仓库"><span class="nav-number">2.3.</span> <span class="nav-text">搭建私人仓库</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#docker配置仓库加速器："><span class="nav-number">2.4.</span> <span class="nav-text">docker配置仓库加速器：</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#常用命令"><span class="nav-number">3.</span> <span class="nav-text">常用命令</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#通用"><span class="nav-number">3.1.</span> <span class="nav-text">通用</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#镜像仓库"><span class="nav-number">3.2.</span> <span class="nav-text">镜像仓库</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#本地image镜像"><span class="nav-number">3.3.</span> <span class="nav-text">本地image镜像</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#container容器"><span class="nav-number">3.4.</span> <span class="nav-text">container容器</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Docker使用demo"><span class="nav-number">4.</span> <span class="nav-text">Docker使用demo</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#hello-world"><span class="nav-number">4.1.</span> <span class="nav-text">hello-world</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#ubuntu"><span class="nav-number">4.2.</span> <span class="nav-text">ubuntu</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#tensorflow"><span class="nav-number">4.3.</span> <span class="nav-text">tensorflow</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Docker私有仓库"><span class="nav-number">5.</span> <span class="nav-text">Docker私有仓库</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#私有仓库的使用"><span class="nav-number">5.1.</span> <span class="nav-text">私有仓库的使用</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#使用私人仓库示例"><span class="nav-number">5.2.</span> <span class="nav-text">使用私人仓库示例</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#创建私服"><span class="nav-number">5.2.1.</span> <span class="nav-text">创建私服</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#registry的webUI管理"><span class="nav-number">5.2.2.</span> <span class="nav-text">registry的webUI管理</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#使用私人仓库"><span class="nav-number">5.2.3.</span> <span class="nav-text">使用私人仓库</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#问题与解决"><span class="nav-number">6.</span> <span class="nav-text">问题与解决</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#docker-for-windows无法启动：Docker-Program-Run-IReadOnlyCollection-1-args"><span class="nav-number">6.1.</span> <span class="nav-text">docker for windows无法启动：Docker.Program.Run(IReadOnlyCollection`1 args)</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#push到私有仓库失败，提示https问题"><span class="nav-number">6.2.</span> <span class="nav-text">push到私有仓库失败，提示https问题</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#附录"><span class="nav-number">7.</span> <span class="nav-text">附录</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#window下docker-daemon的配置"><span class="nav-number">7.1.</span> <span class="nav-text">window下docker daemon的配置</span></a></li></ol></li></ol></div>
            
          </div>
        </section>
      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright" >
  
  &copy; 
  <span itemprop="copyrightYear">2018</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">gatewayzy</span>
</div>

<div class="powered-by">
  由 <a class="theme-link" href="https://hexo.io">Hexo</a> 强力驱动
</div>

<div class="theme-info">
  主题 -
  <a class="theme-link" href="https://github.com/iissnan/hexo-theme-next">
    NexT.Mist
  </a>
</div>

        

        
      </div>
    </footer>

    <div class="back-to-top">
      <i class="fa fa-arrow-up"></i>
    </div>
  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>









  



  
  <script type="text/javascript" src="/vendors/jquery/index.js?v=2.1.3"></script>

  
  <script type="text/javascript" src="/vendors/fastclick/lib/fastclick.min.js?v=1.0.6"></script>

  
  <script type="text/javascript" src="/vendors/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>

  
  <script type="text/javascript" src="/vendors/velocity/velocity.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/vendors/velocity/velocity.ui.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/vendors/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>


  


  <script type="text/javascript" src="/js/src/utils.js?v=5.0.1"></script>

  <script type="text/javascript" src="/js/src/motion.js?v=5.0.1"></script>



  
  

  
  <script type="text/javascript" src="/js/src/scrollspy.js?v=5.0.1"></script>
<script type="text/javascript" src="/js/src/post-details.js?v=5.0.1"></script>



  


  <script type="text/javascript" src="/js/src/bootstrap.js?v=5.0.1"></script>



  



  




  
  

  
  <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
      tex2jax: {
        inlineMath: [ ['$','$'], ["\\(","\\)"]  ],
        processEscapes: true,
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
      }
    });
  </script>

  <script type="text/x-mathjax-config">
    MathJax.Hub.Queue(function() {
      var all = MathJax.Hub.getAllJax(), i;
      for (i=0; i < all.length; i += 1) {
        all[i].SourceElement().parentNode.className += ' has-jax';
      }
    });
  </script>
  <script type="text/javascript" src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>



  

  
<script type="text/javascript" async src="//push.zhanzhang.baidu.com/push.js">
</script>


</body>
</html>
